/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package RRHH_controlador;

import Conexion.Conexion;
import RRHH_Modelo.RHH_ACTIVIDAD;
import RRHH_Modelo.RHH_ACTIVIDAD_CARGO;
import RRHH_Modelo.RHH_CALENDARIO_EMPRESA;
import RRHH_Modelo.RHH_HORARIO;
import RRHH_Modelo.RHH_PERMISOS;
import RRHH_Modelo.RHH_TIPO_DIA;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet(name = "RHH_CALENDARIO_PERMISOS_CONTROLLER", urlPatterns = {"/RHH_CALENDARIO_PERMISOS_CONTROLLER"})
public class RHH_CALENDARIO_PERMISOS_CONTROLLER extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet RHH_CALENDARIO_CARGO_CONTROLLER</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet RHH_CALENDARIO_CARGO_CONTROLLER at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {        
            String evento = request.getParameter("evento");
            RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));
                Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
            String html="";
            switch(evento)
            {
                case "cambiomes":
                    html= cambiomes(request,con);
                    break;
                case "cargatipos":
                    html= cargaactividad(request,con);
                    break;
                case "cargarEventos":
                    html= cargarEventos(request,con);
                    break;               
                case "cargarEventosMinutos":
                    html= cargarEventosMinutos(request,con);
                    break;               
                case "pedirPermiso":
                    html= pedirPermiso(request,con);
                    break;               
                case "horaspordia":
                    html= horaspordia(request,con);
                    break;               
                case "horaspormes":
                    html= horaspormes(request,con);
                    break;  
                case "eliminarPermisos":
                    html= eliminarPermisos(request,con);
                    break;
            }
            
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(html);
        } catch (SQLException ex) {
            Logger.getLogger(RHH_CALENDARIO_PERMISOS_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String cambiomes(HttpServletRequest request, Conexion con) throws SQLException {
        String html="";
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"))-1;
        int idusuario = Integer.parseInt(request.getParameter("idusuario"));
        int idcargo = Integer.parseInt(request.getParameter("idcargo"));
        
        Calendar cal = new GregorianCalendar();
        cal.set(ano, mes, 1);        
        int semanadas=cal.getActualMaximum(Calendar.WEEK_OF_MONTH)+1;
        int maximodia=cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        int diames=1;
        RHH_ACTIVIDAD_CARGO calcarg = new RHH_ACTIVIDAD_CARGO(con);        
        RHH_CALENDARIO_EMPRESA calemp = new RHH_CALENDARIO_EMPRESA(con);
        RHH_TIPO_DIA tipo = new RHH_TIPO_DIA(con);
        int j = cal.get(Calendar.DAY_OF_WEEK);
        int semanaactual=1;
        
        if(j==1)
        {
            semanadas++;
            j=0;
        }
        
        
        html+="<thead>";
        html+="<th class='diacabecera'>Lunes</th>";
        html+="<th class='diacabecera'>Martes</th>";
        html+="<th class='diacabecera'>Miercoles</th>";
        html+="<th class='diacabecera'>Jueves</th>";
        html+="<th class='diacabecera'>Viernes</th>";
        html+="<th class='diacabecera'>Sabado</th>";
        html+="<th class='diacabecera'>Domingo</th>";
        html+="</thead>";
        html+="<tbody>";
        
        Calendar cal_act = new GregorianCalendar();
        cal_act.set(Calendar.HOUR, 0);
        cal_act.set(Calendar.MINUTE, 0);
        cal_act.set(Calendar.SECOND, 0);
        cal_act.set(Calendar.MILLISECOND, 0);
        
        
        while(semanaactual<semanadas)
        {
            html+="<tr>";

            int diasemana=1;
            while(diasemana<=7)
            {
                cal.set(ano, mes, diames);         
                cal.set(Calendar.HOUR, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                SimpleDateFormat fr = new SimpleDateFormat("dd/MM/yyyy");
                List<RHH_PERMISOS> lp = new RHH_PERMISOS(con).TodosxDia(idusuario, fr.format(cal.getTime()));
                String permisodetalle="";
                String acticidadespermisos="";
                for (int i = 0; i < lp.size(); i++) {
                    RHH_PERMISOS act = lp.get(i);
                    String color="green";
                    if(act.getESTADO()==1){
                        color="silver";
                    }
                    permisodetalle=act.getDESCRIPCION()+" "+act.getHORA_INICIOSF()+" - "+act.getHORA_FINSF();
                    acticidadespermisos+="<div style=\"width: 13px; height: 13px; border-radius: 8px; margin:2px; float:left; background:"+color+";\" onmouseover=\"foco(this,'"+permisodetalle+"')\" onmouseout=\"lostfoco(this)\"></div>";
                }
                if(diasemana+1==j||j==0)
                {
                    if(j==0)
                    {
                        html+="<td><div class='dia'></div></td>";
                        html+="<td><div class='dia'></div></td>";
                        html+="<td><div class='dia'></div></td>";
                        html+="<td><div class='dia'></div></td>";
                        html+="<td><div class='dia'></div></td>";
                        html+="<td><div class='dia'></div></td>";
                        
                        int eventoemp = calemp.BuscarEvento(diames,mes+1,ano);
                        List<RHH_ACTIVIDAD_CARGO> lista = calcarg.Buscar(diames,mes+1,ano,idcargo);
                        if(eventoemp!=0)
                        {
                            String detalle="";
                            String resumido="";
                            for (int i = 0; i < lista.size(); i++) 
                            {
                                RHH_ACTIVIDAD act = new RHH_ACTIVIDAD(con).Buscar(lista.get(i).getID_ACTIVIDAD());
                                detalle=act.getDESCRIPCION();
                                resumido+="<div style=\"width: 13px; height: 13px; border-radius: 8px; margin:2px; float:left; background:"+act.getCOLOR()+";\" onmouseover=\"foco(this,'"+detalle+"')\" onmouseout=\"lostfoco(this)\"></div>";
                            }
                            if(cal.after(cal_act) || cal.equals(cal_act))
                                html+="<td style='background: "+tipo.Buscar(eventoemp).getCOLOR()+";'><div class='dia'><div style=\"font-weight: bold;\"><div style=\"width: 74%; float: left; text-align: left;\">"+tipo.Buscar(eventoemp).getDESCRIPCION() +"</div><div style=\"width: 10%; float: left; font-size: 39px; position: relative; top: -4px;\">"+diames+"</div></div><div class='centrado' style=\"position: relative; float: left; top: -18px; width: 65%;\"><div style=\"height: 14px; position: relative; top: -8px;\">"+resumido+"</div><div style=\"height: 14px; position: relative; top: -6px;\">"+acticidadespermisos+"</div><div onClick='addDia(this,"+diames+");' style=\"position: relative; top: -21px; width: 60px; left: 115px;\">PERMISO</div></div>";
                            else
                                html+="<td style='background: "+tipo.Buscar(eventoemp).getCOLOR()+";'><div class='dia'><div style=\"font-weight: bold;\"><div style=\"width: 74%; float: left; text-align: left;\">"+tipo.Buscar(eventoemp).getDESCRIPCION() +"</div><div style=\"width: 10%; float: left; font-size: 39px; position: relative; top: -4px;\">"+diames+"</div></div><div class='centrado' style=\"position: relative; float: left; top: -18px; width: 65%;\"><div style=\"height: 14px; position: relative; top: -8px;\">"+resumido+"</div><div style=\"height: 14px; position: relative; top: -6px;\">"+acticidadespermisos+"</div></div>";
                            html+="</div></td>";
                        }
                        else
                        {
                            
                            String detalle="";
                            String resumido="";
                            for (int i = 0; i < lista.size(); i++) 
                            {
                                RHH_ACTIVIDAD act = new RHH_ACTIVIDAD(con).Buscar(lista.get(i).getID_ACTIVIDAD());
                                detalle=act.getDESCRIPCION();
                                resumido+="<div style=\"width: 13px; height: 13px; border-radius: 8px; margin:2px; float:left; background:"+act.getCOLOR()+";\" onmouseover=\"foco(this,'"+detalle+"')\" onmouseout=\"lostfoco(this)\"></div>";
                            }
                            if(cal.after(cal_act) || cal.equals(cal_act))
                                html+="<td><div class='dia'><div style=\"font-weight: bold;\"><div style=\"width: 74%; float: left; text-align: left;\">"+tipo.Buscar(eventoemp).getDESCRIPCION() +"</div><div style=\"width: 10%; float: left; font-size: 39px; position: relative; top: -4px;\">"+diames+"</div></div><div class='centrado' style=\"position: relative; float: left; top: -18px; width: 65%;\"><div style=\"height: 14px; position: relative; top: -8px;\">"+resumido+"</div><div style=\"height: 14px; position: relative; top: -6px;\">"+acticidadespermisos+"</div><div onClick='addDia(this,"+diames+");' style=\"position: relative; top: -21px; width: 60px; left: 115px;\">PERMISO</div></div></td>";   
                            else
                                html+="<td><div class='dia'><div style=\"font-weight: bold;\"><div style=\"width: 74%; float: left; text-align: left;\">"+tipo.Buscar(eventoemp).getDESCRIPCION() +"</div><div style=\"width: 10%; float: left; font-size: 39px; position: relative; top: -4px;\">"+diames+"</div></div><div class='centrado' style=\"position: relative; float: left; top: -18px; width: 65%;\"><div style=\"height: 14px; position: relative; top: -8px;\">"+resumido+"</div><div style=\"height: 14px; position: relative; top: -6px;\">"+acticidadespermisos+"</div></div></td>";                               
                            html+="</div></td>";
                        }                                
                        diames++;
                        j=1;
                        break;
                    }
                    else
                    {
                        if(diames<=maximodia)
                        {
                            int eventoemp = calemp.BuscarEvento(diames,mes+1,ano);
                            List<RHH_ACTIVIDAD_CARGO> lista = calcarg.Buscar(diames,mes+1,ano,idcargo);
                            if(eventoemp!=0)
                            {
                               
                                String detalle="";
                                String resumido="";
                                for (int i = 0; i < lista.size(); i++) 
                                {
                                    RHH_ACTIVIDAD act = new RHH_ACTIVIDAD(con).Buscar(lista.get(i).getID_ACTIVIDAD());
                                    detalle=act.getDESCRIPCION();
                                    resumido+="<div style=\"width: 13px; height: 13px; border-radius: 8px; margin:2px; float:left; background:"+act.getCOLOR()+";\" onmouseover=\"foco(this,'"+detalle+"')\" onmouseout=\"lostfoco(this)\"></div>";

                                }
                                if(cal.after(cal_act) || cal.equals(cal_act))
                                    html+="<td style='background: "+tipo.Buscar(eventoemp).getCOLOR()+";'><div class='dia'><div style=\"font-weight: bold;\"><div style=\"width: 74%; float: left; text-align: left;\">"+tipo.Buscar(eventoemp).getDESCRIPCION() +"</div><div style=\"width: 10%; float: left; font-size: 39px; position: relative; top: -4px;\">"+diames+"</div></div><div class='centrado' style=\"position: relative; float: left; top: -18px; width: 65%;\"><div style=\"height: 14px; position: relative; top: -8px;\">"+resumido+"</div><div style=\"height: 14px; position: relative; top: -6px;\">"+acticidadespermisos+"</div><div onClick='addDia(this,"+diames+");' style=\"position: relative; top: -21px; width: 60px; left: 115px;\">PERMISO</div></div>";
                                else
                                    html+="<td style='background: "+tipo.Buscar(eventoemp).getCOLOR()+";'><div class='dia'><div style=\"font-weight: bold;\"><div style=\"width: 74%; float: left; text-align: left;\">"+tipo.Buscar(eventoemp).getDESCRIPCION() +"</div><div style=\"width: 10%; float: left; font-size: 39px; position: relative; top: -4px;\">"+diames+"</div></div><div class='centrado' style=\"position: relative; float: left; top: -18px; width: 65%;\"><div style=\"height: 14px; position: relative; top: -8px;\">"+resumido+"</div><div style=\"height: 14px; position: relative; top: -6px;\">"+acticidadespermisos+"</div></div>";
                                html+="</div></td>";
                            }
                            else
                            {
                                
                                String detalle="";
                                String resumido="";
                                for (int i = 0; i < lista.size(); i++) 
                                {
                                    RHH_ACTIVIDAD act = new RHH_ACTIVIDAD(con).Buscar(lista.get(i).getID_ACTIVIDAD());
                                    detalle=act.getDESCRIPCION();
                                    resumido+="<div style=\"width: 13px; height: 13px; border-radius: 8px; margin:2px; float:left; background:"+act.getCOLOR()+";\" onmouseover=\"foco(this,'"+detalle+"')\" onmouseout=\"lostfoco(this)\"></div>";
                                }
                                if(cal.after(cal_act) || cal.equals(cal_act))
                                    html+="<td><div class='dia'><div style=\"font-weight: bold;\"><div style=\"width: 74%; float: left; text-align: left;\">DIA LABORAL</div><div style=\"width: 10%; float: left; font-size: 39px; position: relative; top: -4px;\">"+diames+"</div></div><div class='centrado' style=\"position: relative; float: left; top: -18px; width: 65%;\"><div style=\"height: 14px; position: relative; top: -8px;\">"+resumido+"</div><div style=\"height: 14px; position: relative; top: -6px;\">"+acticidadespermisos+"</div><div onClick='addDia(this,"+diames+");' style=\"position: relative; top: -21px; width: 60px; left: 115px;\">PERMISO</div></div>";
                                else
                                    html+="<td><div class='dia'><div style=\"font-weight: bold;\"><div style=\"width: 74%; float: left; text-align: left;\">DIA LABORAL</div><div style=\"width: 10%; float: left; font-size: 39px; position: relative; top: -4px;\">"+diames+"</div></div><div class='centrado' style=\"position: relative; float: left; top: -18px; width: 65%;\"><div style=\"height: 14px; position: relative; top: -8px;\">"+resumido+"</div><div style=\"height: 14px; position: relative; top: -6px;\">"+acticidadespermisos+"</div></div>";                                
                                html+="</div></td>";
                            }
                        }
                        else
                        {
                            html+="<td><div class='dia'></div></td>";
                        }
                        diames++;
                         j++;
                    }
                }
                else
                {
                    html+="<td><div class='dia'></div></td>";
                }
                diasemana++;
            }
            j=2;
            html+="</tr>";
            semanaactual++;
        }
        html+="</tbody>";
        return html;
    }

    private String cargaactividad(HttpServletRequest request, Conexion con) throws SQLException {
        String html="";
        
        List<RHH_ACTIVIDAD> lista = new RHH_ACTIVIDAD(con).Todos();        
        html+="<li onClick='cambiardia(0);'>Dia Laboral</li>";
        for (int i = 0; i < lista.size(); i++) {
            html+="<li onClick='cambiardia("+lista.get(i).getID()+");', style='background:"+lista.get(i).getCOLOR()+";'>"+lista.get(i).getDESCRIPCION()+"</li>";
        }        
        return html;
    }

    private String cargarEventos(HttpServletRequest request, Conexion con) throws SQLException {
        int dia = Integer.parseInt(request.getParameter("dia"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        int ano = Integer.parseInt(request.getParameter("ano"));
        int cargo = Integer.parseInt(request.getParameter("idcargo"));
        int idusuario = Integer.parseInt(request.getParameter("idusuario"));
        
        Calendar cal = new GregorianCalendar();
        cal.set(Calendar.DAY_OF_MONTH, dia);
        cal.set(Calendar.YEAR, ano);
        cal.set(Calendar.MONTH, mes-1);
        String html="";
        
        List<RHH_ACTIVIDAD_CARGO> actc = new RHH_ACTIVIDAD_CARGO(con).Buscar(dia, mes, ano, cargo);
        RHH_ACTIVIDAD ac = new RHH_ACTIVIDAD(con);
        String ponerhora ="";
        
        List<RHH_HORARIO> horarios = new RHH_HORARIO(con).TodosxUsuarioDiaSesmana(cargo, cal.get(Calendar.DAY_OF_WEEK));
        
        for (int i = 0; i < 24; i++)
        {
            if(i<10)
                ponerhora="0"+i;
            else
                ponerhora=i+"";
          
            html+="<tr>";
            html+="<td onclick='porminuto("+dia+","+i+");'>"+ponerhora+":00</td>";            
            
            for (int j = 0; j < horarios.size(); j++)
            {
                String horas = horarios.get(j).getHORA_INICIOSD().substring(0, 2);
                int horaini = Integer.parseInt(horas);
                
                horas = horarios.get(j).getHORA_FINSD().substring(0, 2);
                int horafin = Integer.parseInt(horas);
                String desc = horarios.get(j).getDESCRIPCION();
                
                if(i>=horaini && i<=horafin)
                {
                    if(i == horaini)
                            html+="<td onclick='crearPermiso("+i+");' style='background: #6598ae; width:100px; '  title='"+desc+"'>&#x2063;</td>";
                 
                    if(i != horaini && i != horafin)
                        html+="<td onclick='crearPermiso("+i+");' style='background: #6598ae; width:100px; '  title='"+desc+"'>&#x2063;</td>";
                }
            }
            
            for (int j = 0; j < actc.size(); j++) 
            {
                String horas = actc.get(j).getHORA_INICIOSF().substring(0, 2);
                int horaini = Integer.parseInt(horas);
                
                horas = actc.get(j).getHORA_FINSF().substring(0, 2);
                int horafin = Integer.parseInt(horas);
                
                ac = ac.Buscar(actc.get(j).getID_ACTIVIDAD());
                
                if(i>=horaini && i<=horafin)
                {
                    if(i == horaini && i!=horafin)
                        html+="<td onclick='crearPermiso("+i+");' style='background: "+ac.getCOLOR()+"; width: 100px;'  title='"+ac.getDESCRIPCION()+"'>&#x2063;</td>";
                    if(i == horafin && i!=horaini)
                        html+="<td onclick='crearPermiso("+i+");' style='background: "+ac.getCOLOR()+"; width: 100px;'  title='"+ac.getDESCRIPCION()+"'>&#x2063;</td>";
                    if(i == horaini && i ==horafin)
                        html+="<td onclick='crearPermiso("+i+");' style='background: "+ac.getCOLOR()+"; width: 100px;'  title='"+ac.getDESCRIPCION()+"'>&#x2063;</td>";
                    if(i != horaini && i != horafin)
                        html+="<td onclick='crearPermiso("+i+");' style='background: "+ac.getCOLOR()+"; width: 100px;'  title='"+ac.getDESCRIPCION()+"'>&#x2063;</td>";
                }                                       
            }
            SimpleDateFormat fr = new SimpleDateFormat("dd/MM/yyyy");
            
            List<RHH_PERMISOS> lp = new RHH_PERMISOS(con).TodosxDia(idusuario, fr.format(cal.getTime()));
            
            for (int j = 0; j < lp.size(); j++) 
            {
                String horas = lp.get(j).getHORA_INICIOSF().substring(0, 2);
                int horaini = Integer.parseInt(horas);
                
                horas = lp.get(j).getHORA_FINSF().substring(0, 2);
                int horafin = Integer.parseInt(horas);                
                
                if(i>=horaini && i<=horafin)
                {                    
                    if(lp.get(j).getESTADO()==1)
                        html+="<td onclick='eliminar("+lp.get(j).getID()+",this);' style='background: #ff0000; width: 100px;'  title='Permiso por "+lp.get(j).getDESCRIPCION()+" en espera de aprobacion'>&#x2063;</td>";
                    else
                        html+="<td onclick='eliminar("+lp.get(j).getID()+",this);' style='background: #ff0000; width: 100px;'  title='Permiso por "+lp.get(j).getDESCRIPCION()+" APROBADO!!'>&#x2063;</td>";
                }                                       
            }
            html+="</tr>";            
        }        
        return html;
    }

    private String cargarEventosMinutos(HttpServletRequest request, Conexion con) throws SQLException {
        int dia = Integer.parseInt(request.getParameter("dia"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        int ano = Integer.parseInt(request.getParameter("ano"));
        int hora = Integer.parseInt(request.getParameter("hora"));
        int cargo = Integer.parseInt(request.getParameter("idcargo"));
        int idusuario = Integer.parseInt(request.getParameter("idusuario"));
        
        Calendar cal = new GregorianCalendar();
        cal.set(Calendar.DAY_OF_MONTH, dia);
        cal.set(Calendar.YEAR, ano);
        cal.set(Calendar.MONTH, mes-1);
        String html="";
        
        List<RHH_ACTIVIDAD_CARGO> actc = new RHH_ACTIVIDAD_CARGO(con).Buscar(dia, mes, ano, cargo);
        RHH_ACTIVIDAD ac = new RHH_ACTIVIDAD(con);
        String ponerhora ="";        
        
        List<RHH_HORARIO> horarios = new RHH_HORARIO(con).TodosxUsuarioDiaSesmana(cargo, cal.get(Calendar.DAY_OF_WEEK));
        
        String perminuto="";
        
        for (int i = 0; i < 60; i++) 
        {          
            if(hora<10)
                ponerhora="0"+hora;
            else
                ponerhora=hora+"";
            
            if(i<10)
                perminuto="0"+i;
            else
                perminuto=i+"";
          
            
            
            html+="<tr>";
            html+="<td onclick='backtime();'>"+ponerhora+":"+perminuto+"</td>";            
            
            for (int j = 0; j < horarios.size(); j++) 
            {                
                String horas = horarios.get(j).getHORA_INICIOSD().substring(0, 2);
                String minutos = horarios.get(j).getHORA_INICIOSD().substring(3, 5);
                int horaini = Integer.parseInt(horas);
                int minini = Integer.parseInt(minutos);
                
                horas = horarios.get(j).getHORA_FINSD().substring(0, 2);
                minutos = horarios.get(j).getHORA_FINSD().substring(3, 5);
                int horafin = Integer.parseInt(horas);
                int minfin = Integer.parseInt(minutos);
                
                String desc = horarios.get(j).getDESCRIPCION();
                
                if(hora>=horaini && hora<=horafin)
                {
                    if(hora == horaini && hora !=horafin)
                        if(i>=minini)
                            html+="<td style='background: #6598ae; width:100px; '  title='"+desc+"'>&#x2063;</td>";
                 
                    if(hora == horafin && hora !=horaini)
                        if(i<=minfin)
                            html+="<td style='background: #6598ae; width:100px; '  title='"+desc+"'>&#x2063;</td>";
                    
                    if(hora == horaini && hora ==horafin)
                        if(i<=minfin && i>=minini)
                            html+="<td style='background: #6598ae; width:100px; '  title='"+desc+"'>&#x2063;</td>";
                    
                    if(hora != horaini && hora != horafin)
                        html+="<td style='background: #6598ae; width:100px; '  title='"+desc+"'>&#x2063;</td>";
                }
            }
            
            for (int j = 0; j < actc.size(); j++) 
            {
                String horas = actc.get(j).getHORA_INICIOSF().substring(0, 2);
                String minutos = actc.get(j).getHORA_INICIOSF().substring(3, 5);
                int horaini = Integer.parseInt(horas);
                int minini = Integer.parseInt(minutos);
                
                horas = actc.get(j).getHORA_FINSF().substring(0, 2);
                minutos = actc.get(j).getHORA_FINSF().substring(3, 5);
                int horafin = Integer.parseInt(horas);
                int minfin = Integer.parseInt(minutos);
                
                ac = ac.Buscar(actc.get(j).getID_ACTIVIDAD());
                
                if(hora>=horaini && hora<=horafin)
                {
                    if(hora == horaini && hora!=horafin)
                        if(i>=minini)
                            html+="<td style='background: "+ac.getCOLOR()+"; width: 100px;'  title='"+ac.getDESCRIPCION()+"'>&#x2063;</td>";
                 
                    if(hora == horafin && hora!=horaini)
                        if(i<=minfin)
                            html+="<td style='background: "+ac.getCOLOR()+"; width: 100px;'  title='"+ac.getDESCRIPCION()+"'>&#x2063;</td>";
                    
                    if(hora == horaini && hora ==horafin)
                        if(i<=minfin && i>=minini)
                            html+="<td style='background: "+ac.getCOLOR()+"; width: 100px;'  title='"+ac.getDESCRIPCION()+"'>&#x2063;</td>";
                    
                    if(hora != horaini && hora != horafin)
                        html+="<td style='background: "+ac.getCOLOR()+"; width: 100px;'  title='"+ac.getDESCRIPCION()+"'>&#x2063;</td>";
                }
            }
            SimpleDateFormat fr = new SimpleDateFormat("dd/MM/yyyy");
            
            List<RHH_PERMISOS> lp = new RHH_PERMISOS(con).TodosxDia(idusuario, fr.format(cal.getTime()));
            RHH_PERMISOS perm = new RHH_PERMISOS(con);                              
            
            for (int j = 0; j < lp.size(); j++) 
            {
                String horas = lp.get(j).getHORA_INICIOSF().substring(0, 2);
                String minutos = lp.get(j).getHORA_INICIOSF().substring(3, 5);
                int horaini = Integer.parseInt(horas);
                int minini = Integer.parseInt(minutos);
                
                horas = lp.get(j).getHORA_FINSF().substring(0, 2);
                minutos = lp.get(j).getHORA_FINSF().substring(3, 5);
                int horafin = Integer.parseInt(horas);
                int minfin = Integer.parseInt(minutos);
                
                
                if(hora>=horaini && hora<=horafin)
                {
                    if(hora == horaini && hora!=horafin)
                        if(i>=minini)
                        {
                            if(lp.get(j).getESTADO()==1)
                                html+="<td onclick='eliminar("+lp.get(j).getID()+",this);' style='background: #ff0000; width: 100px;'  title='Permiso por "+lp.get(j).getDESCRIPCION()+" en espera de aprobacion'>&#x2063;</td>";
                            else
                                html+="<td onclick='eliminar("+lp.get(j).getID()+",this);' style='background: #ff0000; width: 100px;'  title='Permiso por "+lp.get(j).getDESCRIPCION()+" APROBADO!!'>&#x2063;</td>";
                        }
                 
                    if(hora == horafin && hora!=horaini)
                        if(i<=minfin)
                        {
                            if(lp.get(j).getESTADO()==1)
                                html+="<td onclick='eliminar("+lp.get(j).getID()+",this);' style='background: #ff0000; width: 100px;'  title='Permiso por "+lp.get(j).getDESCRIPCION()+" en espera de aprobacion'>&#x2063;</td>";
                            else
                                html+="<td onclick='eliminar("+lp.get(j).getID()+",this);' style='background: #ff0000; width: 100px;'  title='Permiso por "+lp.get(j).getDESCRIPCION()+" APROBADO!!'>&#x2063;</td>";
                        }
                    
                    if(hora == horaini && hora ==horafin)
                        if(i<=minfin && i>=minini)
                        {
                            if(lp.get(j).getESTADO()==1)
                                html+="<td onclick='eliminar("+lp.get(j).getID()+",this);' style='background: #ff0000; width: 100px;'  title='Permiso por "+lp.get(j).getDESCRIPCION()+" en espera de aprobacion'>&#x2063;</td>";
                            else
                                html+="<td onclick='eliminar("+lp.get(j).getID()+",this);' style='background: #ff0000; width: 100px;'  title='Permiso por "+lp.get(j).getDESCRIPCION()+" APROBADO!!'>&#x2063;</td>";
                        }
                    
                    if(hora != horaini && hora != horafin)
                    {
                        if(lp.get(j).getESTADO()==1)
                            html+="<td onclick='eliminar("+lp.get(j).getID()+",this);' style='background: #ff0000; width: 100px;'  title='Permiso por "+lp.get(j).getDESCRIPCION()+" en espera de aprobacion'>&#x2063;</td>";
                        else
                            html+="<td onclick='eliminar("+lp.get(j).getID()+",this);' style='background: #ff0000; width: 100px;'  title='Permiso por "+lp.get(j).getDESCRIPCION()+" APROBADO!!'>&#x2063;</td>";
                    }
                }
            }
            html+="</tr>";         
        }        
        return html;
    }

    private String pedirPermiso(HttpServletRequest request, Conexion con) throws SQLException {
        int hini = Integer.parseInt(request.getParameter("hini"));
        int hfin = Integer.parseInt(request.getParameter("hfin"));
        int mini = Integer.parseInt(request.getParameter("mini"));
        int mfin = Integer.parseInt(request.getParameter("mfin"));
        int dia = Integer.parseInt(request.getParameter("dia"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        int ano = Integer.parseInt(request.getParameter("ano"));
        int idusuario = Integer.parseInt(request.getParameter("idusuario"));
        String motivo = request.getParameter("motivo");
        
        Calendar fechini = new GregorianCalendar();
        fechini.set(Calendar.DAY_OF_MONTH, dia);
        fechini.set(Calendar.MONTH, mes-1);
        fechini.set(Calendar.YEAR, ano);
        fechini.set(Calendar.HOUR_OF_DAY, hini);
        fechini.set(Calendar.MINUTE, mini);
        Calendar fechfin = new GregorianCalendar();
        fechfin.set(Calendar.DAY_OF_MONTH, dia);
        fechfin.set(Calendar.MONTH, mes-1);
        fechfin.set(Calendar.YEAR, ano);
        fechfin.set(Calendar.HOUR_OF_DAY, hfin);
        fechfin.set(Calendar.MINUTE, mfin);
        
        RHH_PERMISOS perm = new RHH_PERMISOS(0, motivo, fechini.getTime(), fechfin.getTime(), idusuario);
        perm.setCon(con);
        perm.Insertar();
        return true+"";
    }

    private String horaspordia(HttpServletRequest request, Conexion con) throws SQLException {
        int dia = Integer.parseInt(request.getParameter("dia"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        int ano = Integer.parseInt(request.getParameter("ano"));
        int idusuario = Integer.parseInt(request.getParameter("idusuario"));

        Calendar fechini = new GregorianCalendar();
        fechini.set(Calendar.DAY_OF_MONTH, dia);
        fechini.set(Calendar.MONTH, mes-1);
        fechini.set(Calendar.YEAR, ano);

        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");        
        RHH_PERMISOS permi = new RHH_PERMISOS(con);
        int minutos_rest = permi.MinutosRestantesxDia(idusuario, format.format(fechini.getTime()));
        
        return minutos_rest+"";
    }

    private String horaspormes(HttpServletRequest request, Conexion con) throws SQLException {    
        int dia = Integer.parseInt(request.getParameter("dia"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        int ano = Integer.parseInt(request.getParameter("ano"));
        int idusuario = Integer.parseInt(request.getParameter("idusuario"));

        Calendar fechini = new GregorianCalendar();
        fechini.set(Calendar.DAY_OF_MONTH, dia);
        fechini.set(Calendar.MONTH, mes-1);
        fechini.set(Calendar.YEAR, ano);

        SimpleDateFormat format = new SimpleDateFormat("MM/yyyy");        
        RHH_PERMISOS permi = new RHH_PERMISOS(con);
        int minutos_rest = permi.MinutosRestantesxMes(idusuario, format.format(fechini.getTime()));
        
        return minutos_rest+"";
    }

    private String eliminarPermisos(HttpServletRequest request, Conexion con) throws SQLException {
        int id = Integer.parseInt(request.getParameter("id"));
        RHH_PERMISOS vaca = new RHH_PERMISOS(con);
        return vaca.EliminarXid(id)+"";
    }
}
